package com.xykj.service;

import com.xykj.common.entry.CrawlerLog;
import com.xykj.mapper.FCrawlerLogMapper;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 通用爬虫服务接口
 */
public interface FCrawlerService {

    /**
     * 执行爬取任务
     * @return 是否成功
     */
    @Transactional(rollbackFor = Exception.class)
    boolean crawl();

//    /**
//     * 记录爬虫日志
//     * @param description 日志描述
//     * @param url 目标URL
//     * @param targetTable 目标表名
//     * @param count 影响行数
//     * @param startTime 开始时间
//     */
//    default void recordLog(String description, String url, String targetTable, int count, LocalDateTime startTime) {
//        CrawlerLog log = CrawlerLog.builder()
//                .description(description + (count > 0 ? "成功，数据量：" + count : "失败"))
//                .url(url)
//                .targetTable(targetTable)
//                .startTime(startTime)
//                .endTime(LocalDateTime.now())
//                .isDeleted(0)
//                .build();
//        getCrawlerLogMapper().insert(log);
//    }
//
//    /**
//     * 数据去重处理
//     * @param list 原始数据列表
//     * @param <T> 数据类型
//     * @return 去重后列表
//     */
//    default <T> List<T> removeDuplicates(List<T> list) {
//        return list.stream()
//                .distinct()
//                .collect(Collectors.toList());
//    }
//
//    /**
//     * 获取爬虫日志Mapper
//     * @return Mapper实例
//     */
//    FCrawlerLogMapper getCrawlerLogMapper();
//
//    /**
//     * 获取当前爬虫名称（需在实现类中具体实现）
//     * @return 爬虫名称
//     */
//    String getCrawlerName();
}